home *** CD-ROM | disk | FTP | other *** search
Wrap
Java Source | 1998-10-25 | 17.3 KB | 838 lines
package com.symantec.itools.frameworks.wizard; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.KeyEvent; import java.awt.event.ActionListener; import java.io.InputStream; import java.io.IOException; import java.net.URL; import java.util.Enumeration; import java.util.ResourceBundle; import java.util.Vector; import java.util.Locale; import com.sun.java.swing.JComponent; import com.sun.java.swing.JButton; import com.sun.java.swing.AbstractButton; import com.sun.java.swing.JPanel; import com.sun.java.swing.UIManager; import com.sun.java.swing.JLabel; import com.sun.java.swing.border.LineBorder; import com.sun.java.swing.KeyStroke; import com.symantec.itools.swing.icons.ImageIcon; import com.symantec.itools.util.ResourceBundleAdapter; /** * @author Symantec Internet Tools Division * @version 1.0 * @since VCafe 3.0 */ public class Wizard extends JPanel { protected static ResourceBundle defaultResourceBundle; protected JPanel displayPanel; protected JPanel pagesPanel; protected JPanel actionPanel; protected JPanel separatorPanel; protected JPanel buttonsPanel; protected JLabel imageLbl; protected JLabel separatorLbl; protected JButton backBtn; protected JButton nextBtn; protected JButton finishBtn; protected JButton cancelBtn; protected JButton helpBtn; protected ImageIcon imageIcon; protected ImageIcon separatorIcon; protected ResourceBundleAdapter resourceBundle; protected KeyAction keyAction; protected boolean addEnterKeyAction; /** * @since VCafe 3.0 */ protected WizardController controller; /** * @since VCafe 3.0 */ protected Vector listeners; /** * @since VCafe 3.0 */ protected boolean showOnAddNotify; /** * @since VCafe 3.0 */ protected boolean isInitialized; static { try { defaultResourceBundle = ResourceBundle.getBundle("com.symantec.itools.frameworks.wizard.WizardBundle"); } catch(Throwable ex) { ex.printStackTrace(); } } { listeners = new Vector(); showOnAddNotify = true; keyAction = null; addEnterKeyAction = false; } public Wizard() { this(defaultResourceBundle); } public Wizard(ResourceBundle bundle) { this(bundle, null); } public Wizard(WizardController controller) { this(defaultResourceBundle, null); } public Wizard(ResourceBundle bundle, WizardController c) { GridBagLayout gridBagLayout; resourceBundle = new ResourceBundleAdapter(bundle); if(c == null) { c = new WizardController(this); } controller = c; isInitialized = false; setLayout(new BorderLayout(0,0)); setSize(332,248); gridBagLayout = new GridBagLayout(); displayPanel = new JPanel(); displayPanel.setLayout(new GridBagLayout()); add("Center", displayPanel); imageIcon = new ImageIcon(); imageLbl = new JLabel(); imageLbl.setDisabledIcon(imageIcon); imageLbl.setIcon(imageIcon); displayPanel.add(imageLbl, new com.symantec.itools.awt.GridBagConstraintsD(0,0,1,1,-1.0,1.0,java.awt.GridBagConstraints.NORTHWEST,java.awt.GridBagConstraints.BOTH,new Insets(6,6,0,0),0,0)); imageLbl.setVisible(false); pagesPanel = new JPanel(); pagesPanel.setLayout(new GridLayout(1,1,0,0)); displayPanel.add(pagesPanel, new com.symantec.itools.awt.GridBagConstraintsD(1,0,1,1,1.0,1.0,java.awt.GridBagConstraints.NORTHEAST,java.awt.GridBagConstraints.BOTH,new Insets(0,0,0,0),0,0)); actionPanel = new JPanel(); actionPanel.setLayout(gridBagLayout); add("South", actionPanel); separatorPanel = new JPanel(); separatorPanel.setLayout(new GridLayout(1,1,0,0)); actionPanel.add(separatorPanel, new com.symantec.itools.awt.GridBagConstraintsD(0,0,0,1,1.0,1.0,java.awt.GridBagConstraints.CENTER,java.awt.GridBagConstraints.BOTH,new Insets(0,6,0,0),0,0)); try { separatorIcon = new ImageIcon(Wizard.class.getResourceAsStream("Separator.gif")); } catch(IOException ex) { } separatorLbl = new JLabel(); separatorLbl.setDisabledIcon(separatorIcon); separatorLbl.setIcon(separatorIcon); separatorPanel.add(separatorLbl); separatorLbl.setVisible(false); buttonsPanel = new JPanel(); buttonsPanel.setLayout(new FlowLayout(FlowLayout.RIGHT,5,5)); actionPanel.add(buttonsPanel, new com.symantec.itools.awt.GridBagConstraintsD(1,1,0,1,1.0,1.0,java.awt.GridBagConstraints.CENTER,java.awt.GridBagConstraints.BOTH,new Insets(0,0,0,0),0,0)); backBtn = new JButton(); buttonsPanel.add(backBtn); nextBtn = new JButton(); buttonsPanel.add(nextBtn); finishBtn = new JButton(); buttonsPanel.add(finishBtn); cancelBtn = new JButton(); buttonsPanel.add(cancelBtn); helpBtn = new JButton(); buttonsPanel.add(helpBtn); setupButton(backBtn, "BACK"); setupButton(nextBtn, "NEXT"); setupButton(finishBtn, "FINISH"); setupButton(cancelBtn, "CANCEL"); setupButton(helpBtn, "HELP"); SymAction lSymAction = new SymAction(); backBtn.addActionListener(lSymAction); nextBtn.addActionListener(lSymAction); finishBtn.addActionListener(lSymAction); cancelBtn.addActionListener(lSymAction); helpBtn.addActionListener(lSymAction); isInitialized = true; } private void setupButton(JButton btn, String base) { String toolTipText; btn.setText(resourceBundle.getString(base + "_BTN_TEXT", "< Prev")); btn.setMnemonic(resourceBundle.getChar(base + "_BTN_MNEMONIC")); btn.setActionCommand(resourceBundle.getString(base + "_BTN_ACTION", "prev")); toolTipText = resourceBundle.getString(base + "_BTN_TOOLTIP", ""); if(!(toolTipText.equals(""))) { btn.setToolTipText(toolTipText); } } /** * @since VCafe 3.0 */ public void setAddEnterKeyAction(boolean addEnterKeyAction) { this.addEnterKeyAction = addEnterKeyAction; } public boolean getAddEnterKeyAction() { return addEnterKeyAction; } /** * @since VCafe 3.0 */ public void addNotify() { super.addNotify(); if(showOnAddNotify && controller != null) { controller.init(); } // Hookup keyboard listeners. if (addEnterKeyAction && keyAction == null) { keyAction = new KeyAction(); registerKeyboardAction(keyAction, "enter pressed", KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), JComponent.WHEN_IN_FOCUSED_WINDOW); } } /** * It has been overridden here to unhook listeners. * @since VCafe 3.0 */ public void removeNotify() { super.removeNotify(); if (keyAction != null) { unregisterKeyboardAction(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0)); unregisterKeyboardAction(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0)); keyAction = null; } } /** * @param c TODO * @since VCafe 3.0 */ public void setWizardController(WizardController c) { controller = c; } /** * @param lm TODO * @since VCafe 3.0 */ public void setLayout(LayoutManager lm) { if(!(isInitialized)) { super.setLayout(lm); } } /** * @param comp TODO * @since VCafe 3.0 */ public void addImpl(Component comp, Object constraints, int index) { if(isInitialized) { if(controller != null) { if(comp instanceof JPanel) { controller.addPanel((JPanel)comp); } } } else { super.addImpl(comp, constraints, index); } } /** * @param panel TODO * @since VCafe 3.0 */ protected void showPanel(JPanel panel) { String panelTitle; String wizardTitle; WizardEvent event; wizardTitle = null; panelTitle = null; if(pagesPanel.getComponentCount() > 0) { if(!(panel.equals(pagesPanel.getComponent(0)))) { pagesPanel.remove(pagesPanel.getComponent(0)); pagesPanel.add(panel); pagesPanel.validate(); } } else { pagesPanel.add(panel); } repaint(); if(panel instanceof WizardPage) { panelTitle = ((WizardPage)panel).getPanelTitle(); } if(controller != null) { wizardTitle = controller.getWizardTitle(); } if(wizardTitle == null) { wizardTitle = "Wizard"; } if(panelTitle != null && panelTitle.length() > 0) { wizardTitle += " - " + panelTitle; } event = new WizardEvent(this, WizardEvent.WIZARD_TITLE_CHANGED); event.setNewTitle(wizardTitle); fireWizardEvent(event); } /** * @author Symantec Internet Tools Division * @version 1.0 * @since VCafe 3.0 */ class SymAction implements ActionListener { /** * @param event TODO * @since VCafe 3.0 */ public void actionPerformed(ActionEvent event) { Object object; object = event.getSource(); if(object == backBtn) { backBtnActionPerformed(event); } else if(object == nextBtn) { nextBtnActionPerformed(event); } else if(object == finishBtn) { finishBtnActionPerformed(event); } else if(object == cancelBtn) { cancelBtnActionPerformed(event); } else if(object == helpBtn) { helpBtnActionPerformed(event); } } } /** * KeyAction * @since VCafe 3.0 */ public class KeyAction implements java.awt.event.ActionListener { /** * Handles Action Events associated with registered keyboard actions. */ public void actionPerformed(java.awt.event.ActionEvent event) { String command = event.getActionCommand(); if (command.equals("enter pressed")) { if (isNextEnabled()) { nextBtnActionPerformed(null); } else if (isFinishEnabled()) { finishBtnActionPerformed(null); } } } } /** * @param event TODO * @since VCafe 3.0 */ void backBtnActionPerformed(ActionEvent event) { if(controller != null) { controller.backPanel(); } } /** * @param event TODO * @since VCafe 3.0 */ void nextBtnActionPerformed(ActionEvent event) { if(controller != null) { controller.nextPanel(); } } /** * @param event TODO * @since VCafe 3.0 */ void finishBtnActionPerformed(ActionEvent event) { finish(); } /** * @param event TODO * @since VCafe 3.0 */ void cancelBtnActionPerformed(ActionEvent event) { cancel(); } /** * @param event TODO * @since VCafe 3.0 */ void helpBtnActionPerformed(ActionEvent event) { if(controller != null) { controller.help(); } } /** * @param f TODO * @since VCafe 3.0 */ public void setBackEnabled(boolean f) { enableButton(backBtn, f); } /** * @param f TODO * @since VCafe 3.0 */ public void setNextEnabled(boolean f) { enableButton(nextBtn, f); } /** * @param f TODO * @since VCafe 3.0 */ public void setFinishEnabled(boolean f) { enableButton(finishBtn, f); } /** * @param f TODO * @since VCafe 3.0 */ public void setCancelEnabled(boolean f) { enableButton(cancelBtn, f); } /** * @param f TODO * @since VCafe 3.0 */ public void setHelpEnabled(boolean f) { enableButton(helpBtn, f); } /** * @param b TODO * @param f TODO * @since VCafe 3.0 */ private void enableButton(AbstractButton b, boolean f) { b.setEnabled(f); b.setFocusPainted(f); } /** * @since VCafe 3.0 */ public boolean isBackEnabled() { return (backBtn.isEnabled()); } /** * @since VCafe 3.0 */ public boolean isNextEnabled() { return (nextBtn.isEnabled()); } /** * @since VCafe 3.0 */ public boolean isFinishEnabled() { return (finishBtn.isEnabled()); } /** * @since VCafe 3.0 */ public boolean isCancelEnabled() { return (cancelBtn.isEnabled()); } /** * @since VCafe 3.0 */ public boolean isHelpEnabled() { return (helpBtn.isEnabled()); } /** * @since VCafe 3.0 */ public void setBackFocus() { backBtn.requestFocus(); } /** * @since VCafe 3.0 */ public void setNextFocus() { nextBtn.requestFocus(); } /** * @since VCafe 3.0 */ public void setFinishFocus() { finishBtn.requestFocus(); } /** * @since VCafe 3.0 */ public void setCancelFocus() { cancelBtn.requestFocus(); } /** * @since VCafe 3.0 */ public void setHelpFocus() { helpBtn.requestFocus(); } /** * @since VCafe 3.0 */ public void finish() { if(controller != null) { controller.finish(); } fireWizardEvent(new WizardEvent(this, WizardEvent.WIZARD_FINISH_REQUESTED)); } /** * @since VCafe 3.0 */ public void finishSuccessful() { fireWizardEvent(new WizardEvent(this, WizardEvent.WIZARD_FINISHED_SUCCESSFULLY)); } /** * @since VCafe 3.0 */ public void cancel() { if(controller != null) { controller.cancel(); } fireWizardEvent(new WizardEvent(this, WizardEvent.WIZARD_CANCEL)); } /** * @param listener TODO * @since VCafe 3.0 */ public void addWizardListener(WizardListener listener) { if(!(listeners.contains(listener))) { listeners.addElement(listener); } } /** * @param listener TODO * @since VCafe 3.0 */ public void removeWizardListener(WizardListener listener) { if(listeners.contains(listener)) { listeners.removeElement(listener); } } /** * @param event TODO * @since VCafe 3.0 */ protected void fireWizardEvent(WizardEvent event) { Vector tempListeners; synchronized(listeners) { tempListeners = (Vector)listeners.clone(); } switch(event.getID()) { case WizardEvent.WIZARD_FINISH_REQUESTED: { for(Enumeration e = listeners.elements(); e.hasMoreElements();) { ((WizardListener)e.nextElement()).wizardFinishRequested(event); } break; } case WizardEvent.WIZARD_FINISHED_SUCCESSFULLY: { for(Enumeration e = listeners.elements(); e.hasMoreElements();) { ((WizardListener)e.nextElement()).wizardFinishedSuccessfully(event); } break; } case WizardEvent.WIZARD_CANCEL: { for(Enumeration e = listeners.elements(); e.hasMoreElements();) { ((WizardListener)e.nextElement()).wizardCanceled(event); } break; } case WizardEvent.WIZARD_TITLE_CHANGED: { for(Enumeration e = listeners.elements(); e.hasMoreElements();) { ((WizardListener)e.nextElement()).wizardTitleChanged(event); } break; } } } /** * @since VCafe 3.0 */ public Frame getParentFrame() { Container parent; Frame frame; parent = getParent(); frame = null; while(parent != null) { if(parent == null) { break; } else if(parent instanceof Frame) { frame = (Frame) parent; } parent = parent.getParent(); } return frame; } /** * @param visible TODO * @since VCafe 3.0 */ public void setSeparatorVisible(boolean visible) { separatorLbl.setVisible(visible); } /** * @since VCafe 3.0 */ public boolean isSeparatorVisible() { return separatorLbl.isVisible(); } public Dimension getMinimumSize() { return (getPreferredSize()); } public Dimension getPreferredSize() { return (new Dimension(480, 345)); } public void setImage(Image image) { setImage(new ImageIcon(image)); } public void setImage(URL url) { setImage(new ImageIcon(url)); } public void setImage(InputStream stream) throws IOException { setImage(new ImageIcon(stream)); } public void setImage(ImageIcon icon) { imageIcon = icon; if(icon != null) { imageLbl.setDisabledIcon(imageIcon); imageLbl.setIcon(imageIcon); imageLbl.setVisible(true); displayPanel.validate(); } else { imageLbl.setVisible(false); } repaint(); } }